/*
 * @lc app=leetcode.cn id=12 lang=cpp
 * @lcpr version=30204
 *
 * [12] 整数转罗马数字
 */


// @lcpr-template-start
using namespace std;
#include <algorithm>
#include <array>
#include <bitset>
#include <climits>
#include <deque>
#include <functional>
#include <iostream>
#include <list>
#include <queue>
#include <stack>
#include <tuple>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>
// @lcpr-template-end
// @lc code=start
class Solution {
    // 方法一：简洁版
//     static constexpr string R[4][10] = {
//         {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"}, // 个位
//         {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"}, // 十位
//         {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"}, // 百位
//         {"", "M", "MM", "MMM"}, // 千位
//     };

// public:
//     string intToRoman(int num) {
//         return R[3][num / 1000] + R[2][num / 100 % 10] + R[1][num / 10 % 10] + R[0][num % 10];
//     }

public:
    // 方法二：普通版，把大的数字一步步拿掉
    string intToRoman(int num) {
        string res = "";
        while(num/1000)
        {
            res +='M';
            num -=1000;
        }
        while(num /900)
        {
            res +="CM";
            num -=900;
        }
        while(num/500)
        {
            res +='D';
            num -= 500;
        }
        while(num/400)
        {
            res +="CD";
            num -= 400;
        }
        while(num/100)
        {
            res +='C';
            num -= 100;
        }
        while(num/90)
        {
            res +="XC";
            num -= 90;
        }
        while(num/50)
        {
            res +='L';
            num -= 50;
        }
        while(num/40)
        {
            res +="XL";
            num -= 40;
        }
        while(num/10)
        {
            res +='X';
            num -= 10;
        }
        while(num/9)
        {
            res +="IX";
            num -= 9;
        }
        while(num/5)
        {
            res +='V';
            num -= 5;
        }
        while(num/4)
        {
            res +="IV";
            num -= 4;
        }
        while(num/1)
        {
            res +='I';
            num -= 1;
        }
        return res;
    }
};
// @lc code=end



/*
// @lcpr case=start
// 3749\n
// @lcpr case=end

// @lcpr case=start
// 58\n
// @lcpr case=end

// @lcpr case=start
// 1994\n
// @lcpr case=end

 */

